package com.fjwt.gz.service.activity;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fjwt.gz.db.entity.ActivityShareEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.sql.Time;
import java.util.Date;
import java.util.List;

/**
 * 新增活动
 *
 * @Author: Will
 * @Date: 2024-01-05
 * @Version: 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseActivityDTO<T> {


    private ActivitySetting activitySetting;

    private List<ActivityAward> activityAwardList;

    private ActivityShareEntity activityShare;


    /**
     * 活动设置
     */
    @Data
    public static class ActivitySetting {
        /**
         * 营销活动id
         */
        private Long activityId;

        /**
         * 同一用户可参与次数（0代表不限制）
         */
        private Integer onlyOneTimes;

        /**
         * 是否开启黑名单（0代表不黑名单，1代表黑名单）
         */
        private Integer hasBlacklist;

        /**
         * 是否开启白名单（0代表不白名单，1代表白名单）
         */
        private Integer hasWhitelist;

        /**
         * 周期性限制参与(0不限制， 1限每日，2限每周，3限每月)
         */
        private Integer periodType;

        /**
         * 周期性限制次数（period_type != 0时有效）
         */
        private Integer periodTimes;

        /**
         * 特殊参与限制(0不限制， 1每周几可以参与，2特殊日期可以参与)
         */
        private Integer specialType;

        /**
         * 特殊参与限制，多选，以逗号进行分隔(special_type!= 0时有效; special_type=1时，为数字1~5；special_type=2时，为具体日期)
         */
        private String specialContent;

        /**
         * 参与时间段限制（0不限制 1限制）
         */
        private Integer timeType;

        /**
         * 参与时间段限制，每天开始时间
         */
        private Time timeStart;

        /**
         * 参与时间段限制，每天结束时间
         */
        private Time timeEnd;

        /**
         * 参与门槛限制（0不限制，1限制）
         */
        private Integer thresholdType;

        /**
         * 参与门槛限制,前多少次免费
         */
        private Integer thresholdFreeTimes;

        /**
         * 参与门槛限制,后续需消耗多少积分可参与
         */
        private Integer thresholdJoinScore;

        /**
         * 是否关注公众号参与（0代表不关注，1代表关注）
         */
        private Integer isFollowOfficial;

        private Long activitySettingId;
        /**
         * 积分奖励(0代表不奖励)
         */
        private Integer firstJoinScore;

        /**
         * 每次参与奖励积分
         */
        private Integer everyJoinScore;

        /**
         * 中奖概率类型： 0按比例中奖 ，1顺延中奖，2百分百中奖
         */
        private Integer awardType;

        /**
         * 是否开启安慰奖： 0开启 1不开启
         */
        private Integer isConsolation;


        /**
         * 积分自领取后多少天过期
         */
        private Integer overDays;

        /**
         * 积分过期类型
         */
        private Integer overType;

        /**
         * 积分过期时间
         */
        private Date overTime;


        /**
         * 参与商户类型（0星级 1名单 2进件时间  3全量）
         */
        private Integer mchType;


        /**
         * 参与商户类型参数内容（星级：mch_content字段;名单：表t_a_activity_mch; 进件时间：表t_mch_channel;全量：表t_mch_info）
         */
        private String mchContent;

        /**
         * 0自然流量，1转发朋友/群 ，2公众号渠道码 ，3广告，4商户活动码，5分享到朋友圈
         */
        private String joinTypes;

        /**
         * 黑名单规则id列表
         */
        private List<Long> blacklistRuleIdList;
    }

    /**
     * 活动奖品
     */
    @Data
    public static class ActivityAward {

        private Long awardId;

        /**
         * 奖品类型  0卡券 1实物   2虚拟券  3积分
         */
        private Integer awardType;

        /**
         * 奖品名称
         */
        private String awardName;

        /**
         * 奖品等级（0：安慰奖 ,1一等奖，2二等奖...）
         */
        private Integer awardLevel;

        /**
         * 中奖概率，（百分比0~100）
         */
        private Integer awardProbability;

        /**
         * 备注（示例：A\B\C）
         */
        private String remark;

        /**
         * 奖品价值
         */
        private Integer awardPrice;

        /**
         * 奖品总价
         */
        private Integer awardAmount;

        /**
         * 奖品数量
         */
        private Integer awardNum;

        /**
         * 奖品领取数量
         */
        private Integer awardGet;

        /**
         * 出资方配置信息，为空时平台出资
         **/
        private String payConfig;

        /**
         * 兑换助力达标次数
         */
        private Integer exchangeShareNum;
    }


    private Long activityId;
    /**
     * 活动模板ID
     */
    private String activityTemplateNo;

    /**
     * 活动名称
     */
    private String activityName;

    /**
     * 活动海报
     */
    private String activityImg;

    /**
     * 活动内容
     */
    private String activityJson;

    /**
     * 活动提前曝光时间，若不填则同活动开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date exposureTime;

    /**
     * 活动开始时间
     */
    @JSONField(name = "startTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;

    /**
     * 活动结束时间，不填则表示为永久活动
     */
    @JSONField(name = "endTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;

    /**
     * 活动状态：0草稿 1审批中 2通过 3未通过
     */
    private Integer state;

    /**
     * 归属商圈id
     */
    private Long groupId;

    /**
     * 代理商号1
     */
    private String agentNo1;

    /**
     * 代理商号2
     */
    private String agentNo2;

    /**
     * 代理商号3
     */
    private String agentNo3;

    /**
     * 代理商号4
     */
    private String agentNo4;

    /**
     * 机构ID
     */
    private String agentNo;

    /**
     * 创建者id
     */
    private Long createdUid;

    /**
     * 活动备注
     */
    private String remark;

    /**
     * 出资方，为空时平台出资
     */
    private Long payAuthId;

    /**
     * 活动编号
     */
    private String activityNo;

    /**
     * 公众号素材图片id
     */
    private String thumbMediaId;

    /**
     * 公众号素材图片路径
     */
    private String imgUrl;

    /**
     * 小程序页面路由
     */
    private String litePath;

    /**
     * 流量入口（多选，以逗号进行分隔）
     * 0小程序首页
     * 1机构运营工具入口
     * 2公众号渠道码
     * 3广告
     * 4商家活动入口
     */
    private String entryway;
    /**
     * 小程序页面副路由
     */
    private String litePath2;
    /**
     * 活动副页面主图
     */
    private String activityImg2;

    /**
     * 活动是否下级可见( 0否  1是 ，默认0)
     */
    private Integer isNextView;


    /**
     * 指定下级活动机构ID
     */
    private String nextAgentNo;

    /**
     * 活动归属平台：MARKETING 营销平台   HOTEL 民宿平台 （可多选，默认营销平台）
     */
    private String wxOfficalAppId;

    /**
     * 小程序appid
     */
    private String wxMiniProgramAppId;

    private Integer type;

}
